package com.message.api.base.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.message.api.base.entity.MessageType;
import com.message.api.base.entity.SysMessage;
import com.message.api.base.vo.SysMessageVo;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * <p>
 * 服务类
 * </p>
 *
 * @author mzl
 * @since 2020-11-14
 */
public interface SysMessageService extends IService<SysMessage> {

    /**
     * 条件查询
     *
     * @param example
     * @return
     */
    List<SysMessageVo> findByExample(SysMessageVo example);

    /**
     * 分页查询
     *
     * @param page
     * @param example
     * @return
     */
    Page<SysMessageVo> findByPage(Page page, SysMessageVo example);

    /**
     * 根据id获取消息
     *
     * @param id
     * @return
     */
    SysMessageVo findById(Integer id);

    /**
     * 根据id批量获取消息
     *
     * @param ids
     * @return
     */
    List<SysMessage> findByIds(List<Integer> ids);

    /**
     * 阅读消息
     *
     * @param sysMessages
     */
    @Transactional
    void read(List<SysMessage> sysMessages);

    /**
     * 批量阅读
     *
     * @param ids
     */
    @Transactional
    void batchRead(List<Integer> ids);

    /**
     * 用户未读消息数
     *
     * @param userid
     * @return
     */
    Integer noReadCount(Integer userid);

    /**
     * 发送消息
     *
     * @param senduserid
     * @param targetid
     * @param messageType
     * @param title
     * @param message
     * @param link
     */
    @Transactional
    void sendMessage(Integer senduserid, Integer targetid, MessageType messageType, String title, String message,
                     String link);

    /**
     * 批量发送消息
     *
     * @param senduserid
     * @param targetids
     * @param messageType
     * @param title
     * @param message
     * @param link
     */
    @Transactional
    void sendMessage(Integer senduserid, List<Integer> targetids, MessageType messageType, String title,
                     String message, String link);

    /**
     * 删除用户消息
     *
     * @param userIds
     * @return
     */
    @Transactional
    Boolean deleteByUserId(List<Integer> userIds);


}
